<?php

require_once('commons_constantes.php');
require_once('fct_date.php');

/**
 * Fonctions communces de gestion des logs
 */

/**
 * Logue la trace $log avec le bon niveau de log correspondant à $level
 * @param string $log trace à loguer
 * @param int $level niveau de log requis
 */
function logger($log, $level) {
	error_log(getDateToPrint() . ' - ' . getLogByLevel($level) . ' : ' . $log);
}

/**
 * Logue en niveau trace
 * @param $log
 */
function logTrace($log) {
	logger($log, LVL_TRACE);
}

/**
 * Logue en niveau debug
 * @param $log
 */
function logDebug($log) {
	logger($log, LVL_DEBUG);
}

/**
 * Logue en niveau info
 * @param $log
 */
function logInfo($log) {
	logger($log, LVL_INFO);
}

/**
 * Logue en niveau warn
 * @param $log
 */
function logWarn($log) {
	logger($log, LVL_WARN);
}

/**
 * Logue en niveau error
 * @param $log
 */
function logError($log) {
	logger($log, LVL_ERROR);
}

/**
 * Logue en niveau fatal
 * @param $log
 */
function logFatal($log) {
	logger($log, LVL_FATAL);
}

/**
 * Retourne le nom du niveau de log correspondant au niveau $level. Si $level n'est pas connu, retourne DEBUG par défaut
 * @param $level niveau de log
 * @return string
 */
function getLogByLevel($level) {
	$logName = null;
	switch($level) {
		case LVL_TRACE :
			$logName = 'TRACE';
			break;
		case LVL_DEBUG :
			$logName = 'DEBUG';
			break;
		case LVL_INFO :
			$logName = 'INFO';
			break;
		case LVL_WARN :
			$logName = 'WARN';
			break;
		case LVL_ERROR :
			$logName = 'ERROR';
			break;
		case LVL_FATAL :
			$logName = 'FATAL';
			break;
		default :
			$logName = 'DEBUG';
			break;
	}
	return $logName;
}

/**
 * Retourne la date courante au format UTC
 * @return string : date courante au format UTC
 */
function getDateToPrint() {
	list($msecs, $secs) = explode(' ', microtime());
	$millisec = round($msecs * 1000);
	return '['.date('Y-m-d H:i:s', time()).'.'.$millisec.']';
}